/**
 *  1.每天运行schedule，里面调batch，batch里面检索联系人，检索条件是lastmodifieddate=昨天 
 *  2.找到这些联系人，拿到他们的account 
 *  3.再检索account下面所有的联系人，在逻辑里面循环account，算出平均值
 *  created by Harry on 2017年03月16日
 */
global class AvgAccountContactsCompleteSchedule implements Schedulable{
    global void execute(SchedulableContext sc) {
        //客户ID集合
        Set<Id> accountIdSet = new Set<Id>();
        //所有修改过的联系人（ALL ROWS 包括被删除的联系人）
        Datetime d = System.now().addDays(-1);
        for(Contact contact : [SELECT Id,AccountId FROM Contact WHERE LastModifiedDate >= :d  ]){
            accountIdSet.add(contact.AccountId);
        }

        List<Account> accountList = [SELECT Id,RecordTypeId,
            (SELECT Id,CustomerCompleteness__c,DealerCompleteness__c FROM Contacts where IncorporateCompleteness__c = true )
            FROM Account WHERE Id IN : accountIdSet  ];

        for(Account account : accountList){
            List<Contact> contacts = account.Contacts;
            Decimal completeness = 0;


                if(!contacts.isEmpty()){    
                    for(Contact contact : contacts){
                        if(contact.CustomerCompleteness__c!=null){
                            completeness += contact.CustomerCompleteness__c  ;
                        }
                    }
                    completeness /= contacts.size();
                }
                account.CustomerContactInfoIntegrity__c = completeness;
             

            // if(account.RecordTypeId == Utils.getRecordTypeIdByDevNameAndObjName('经销商', 'Account')){
            //     if(!contacts.isEmpty()){
            //         for(Contact contact : contacts){
            //             if(contact.DealerCompleteness__c!=null){
            //                 completeness += contact.DealerCompleteness__c ;
            //             }
            //         }
            //         completeness /= contacts.size();
            //     }
            //     account.DealerContactInfoIntegrity__c = completeness;
            // }
        }
        Database.update(accountList, false);
    }
}
/**
匿名执行脚本

AvgAccountContactsCompleteSchedule sc = new AvgAccountContactsCompleteSchedule();

String fmt = '0 44 0-23 1-31 1-12 ? 2017-2098';//每1小时执行一次
// String fmt = '0 10 0 1-31 1-12 ? 2017-2098';//每天执行一次
System.schedule('每天刷新客户联系人信息完整度 计划任务；'+Datetime.now().format('yyyyMMddHHmmss'), fmt, sc);

*/